package mx.frantor.catalogos.daoimp;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import mx.frantor.catalogos.dao.EstatusDetallePedidoDAO;
import mx.frantor.catalogos.entitys.EstatusDetallePedidoEntity;
import mx.frantor.util.HibernateUtil;

public class EstatusDetallePedidoDAOImpl implements EstatusDetallePedidoDAO{

	@Override
	public String agregarEstatus(EstatusDetallePedidoEntity nuevoEstatus) {
		String e = "";
		Session session = HibernateUtil.getSessionFactory()
				.getCurrentSession();
		
		session.beginTransaction();
		try {
		session.save(nuevoEstatus);
		session.flush();
		session.getTransaction().commit();
		e = nuevoEstatus.getIdEstatusDetallePedido().toString();
		} catch (Exception x) {
			//e.printStackTrace();
			session.getTransaction().rollback();
			e = x.getMessage();
			//return e.toString();
		}
		HibernateUtil.getSessionFactory().getCurrentSession().close();

		System.out.println("agregar EstatusDetallePedido resultado " + e);

		return e;
	}

	@Override
	public String modificarEstatus(EstatusDetallePedidoEntity modificarEstatus) {
		// TODO Auto-generated method stub
				String e = "";
				Session session = HibernateUtil.getSessionFactory()
						.getCurrentSession();
			
				session.beginTransaction();
				try {
					EstatusDetallePedidoEntity estDetPedTemp = (EstatusDetallePedidoEntity) session.get(
							EstatusDetallePedidoEntity.class, modificarEstatus.getIdEstatusDetallePedido());
				session.flush();
				session.evict(estDetPedTemp);
				session.update(modificarEstatus);
				session.getTransaction().commit();
				} catch (Exception x) {
					//e.printStackTrace();
					session.getTransaction().rollback();
					e = x.getMessage();
					//return e.toString();
				}
				HibernateUtil.getSessionFactory().getCurrentSession().close();

				System.out.println("modificar EstatusDetallePedido resultado " + e);

				return e;
	}

	@Override
	public String eliminarEstatus(long idestatusdetallepedido) {
		// TODO Auto-generated method stub
				String e = "";
				Session session = HibernateUtil.getSessionFactory()
						.getCurrentSession();		
					session.beginTransaction();
					try {
						EstatusDetallePedidoEntity estDetPedElimina = (EstatusDetallePedidoEntity) session.get(
								EstatusDetallePedidoEntity.class, idestatusdetallepedido);
					session.delete(estDetPedElimina);
					session.getTransaction().commit();
				} catch (Exception x) {
					//e.printStackTrace();
					session.getTransaction().rollback();
					e = x.getMessage().toString();
					//return e.toString();
				}
				//HibernateUtil.getSessionFactory().getCurrentSession().close();
				HibernateUtil.getSessionFactory().getCurrentSession().close();
				System.out.println("eliminar EstatusDetallePedido resultado " + e);

				
				return e;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<EstatusDetallePedidoEntity> getTodosEstatusActivos() {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		List<EstatusDetallePedidoEntity> clientes = session.createCriteria(EstatusDetallePedidoEntity.class)
				.addOrder(Order.asc("IdEstatusDetallePedido")).list();
		HibernateUtil.getSessionFactory().getCurrentSession().close();
		return clientes;
	}

	@SuppressWarnings("unchecked")
	@Override
	public EstatusDetallePedidoEntity getEstatusId(long idEstatusDetallePedido) {
		// TODO Auto-generated method stub
				Session session = HibernateUtil.getSessionFactory().getCurrentSession();
				session.beginTransaction();
				List<EstatusDetallePedidoEntity> estatusDetPed = (List<EstatusDetallePedidoEntity>) 
						session.createCriteria(EstatusDetallePedidoEntity.class)
						.add(Restrictions.eq("IdEstatusDetallePedido", idEstatusDetallePedido))
						.setFetchSize(1).list();
				HibernateUtil.getSessionFactory().getCurrentSession().close();
				try{
					return estatusDetPed.get(0);
				}catch (Exception x) {
					return null;
				}
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<EstatusDetallePedidoEntity> getEstatusPorId(
			long idEstatusDetallePedido) {
		// TODO Auto-generated method stub
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		List<EstatusDetallePedidoEntity> lstEstatusDetPed = (List<EstatusDetallePedidoEntity>) session.createCriteria(EstatusDetallePedidoEntity.class)
				.add(Restrictions.eq("IdEstatusDetallePedido", idEstatusDetallePedido))
				.list();
		HibernateUtil.getSessionFactory().getCurrentSession().close();
		
		return lstEstatusDetPed;
		
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<EstatusDetallePedidoEntity> getEstatusPorIdDetallePedido(
			long idDetallePedido) {
		// TODO Auto-generated method stub
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		List<EstatusDetallePedidoEntity> lstEstatusDetPed = (List<EstatusDetallePedidoEntity>) 
				session.createCriteria(EstatusDetallePedidoEntity.class)
				.add(Restrictions.eq("IdDetallePedido", idDetallePedido))
				.addOrder(Order.asc("Estatus"))
				.list();
		HibernateUtil.getSessionFactory().getCurrentSession().close();
		
		return lstEstatusDetPed;
	}

	@SuppressWarnings("unchecked")
	@Override
	public int eliminarEstatusDetener(long idDetPed, String estatus) {
		String e = "";
		int cant=0;
		Session session = HibernateUtil.getSessionFactory()
				.getCurrentSession();		
			session.beginTransaction();
			try {
				List<EstatusDetallePedidoEntity> lstEstatusDetPed = (List<EstatusDetallePedidoEntity>) 
						session.createCriteria(EstatusDetallePedidoEntity.class)
						.add(Restrictions.eq("IdDetallePedido", idDetPed))
						.add(Restrictions.not(Restrictions.eq("Estatus", estatus)))
						.list();
				for(EstatusDetallePedidoEntity estatusDetPed:lstEstatusDetPed){
					cant += estatusDetPed.getCantidad();
					session.delete(estatusDetPed);
				}
				session.getTransaction().commit();
			
		} catch (Exception x) {
			//e.printStackTrace();
			session.getTransaction().rollback();
			e = x.getMessage().toString();
			//return e.toString();
		}
		//HibernateUtil.getSessionFactory().getCurrentSession().close();
		HibernateUtil.getSessionFactory().getCurrentSession().close();
		System.out.println("eliminarCancelar EstatusDetallePedido resultado " + e);

		
		return cant;
	}

	@SuppressWarnings("unchecked")
	@Override
	public EstatusDetallePedidoEntity getEstatusIdDetEstatus(long idDetPed,
			String estatusAct) {
		// TODO Auto-generated method stub
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		List<EstatusDetallePedidoEntity> estatusDetPed = (List<EstatusDetallePedidoEntity>) session.createCriteria(EstatusDetallePedidoEntity.class)
				.add(Restrictions.eq("IdDetallePedido", idDetPed))
				.add(Restrictions.eq("Estatus", estatusAct))
				.setFetchSize(1).list();
		HibernateUtil.getSessionFactory().getCurrentSession().close();
		try{
			return estatusDetPed.get(0);
		}catch (Exception x) {
			return null;
		}
	}

}
